﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using UI.View;

namespace UI
{
    public class MouseCapturerPresenter
    {
        IMouseCapturer view;
        private Queue<Record> RecordQueue; // Очередь в которой хранятся записи для воспроизведения 
        public MouseCapturerPresenter(IMouseCapturer view)
        {
            this.view = view;
            RecordQueue = new Queue<Record>(); // Инициализация очереди из записей
        }

        public void AddRecord() // Добавление записи
        {
            RecordQueue.Enqueue(view.GiveRecord());
        }

        public void ReadRecord() // Чтение и воспроизведение записей
        {
            if (RecordQueue.Count() > 0)
            RecordQueue.Dequeue().Read(view); // Чтение и удаление первой записи 
            else
            {
                view.StopPlay();
            }
        }
    }

    /*
    * Класс RecordCoordinates - запись с координатами. Скорее всего будет использоваться для записи
    * координат мыши, и внесение их в какую нибудь базу 
   */

    public class RecordCoordinates : Record
    {
        private int X_Coordinate;
        private int Y_Coordinate;

        public RecordCoordinates(int X_Coordinate, int Y_Coordinate) // Конструктор, задаются координаты X и Y
        {
            this.X_Coordinate = X_Coordinate;
            this.Y_Coordinate = Y_Coordinate;
        }

        public void Read(IMouseCapturer view)
        {
            view.MoveMouse(X_Coordinate, Y_Coordinate); // Курсор становится на задданные координаты
        }

        public string CoordinatesCount()
        {
            return "X is " + X_Coordinate + " Y is " + Y_Coordinate;
        }

    }

    public interface Record // Общий интерфейс записываемых данных
    {
        void Read(IMouseCapturer view); // Чтение данных из объекта
    }
    /*
     * Класс RecordMouseLeftClick - запись нажатия лево клавиши мыши. Для внесения записей в какую нибудь базу
     */
    public class RecordMouseLeftClick : Record
    {
        private Point whereIclick;

        public RecordMouseLeftClick(Point whereIclick) // Конструктор, задается местоположение клика мыши
        {
            this.whereIclick = whereIclick;
        }

        public void Read(IMouseCapturer view)
        {
            MouseEventArgs ClickMouse = new MouseEventArgs(MouseButtons.Left, 1, whereIclick.X, whereIclick.Y, 0); // Имитация клика
            view.ImitationMouseClick(ClickMouse); // Реализация клика
        }


    }
}
